home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / ups / genpower.000 / genpower / genpower-1.0.1 / genpower.docs < prev    next >
Text File  |  1995-07-16  |  77KB  |  1,966 lines

  1. GENPOWER
  2. [Generic UPS Monitoring For Linux]
  3. By Tom Webster <webster@kaiwan.com>
  4. Version 1.0.1
  5. 07/07/95
  6.  
  7.  
  8. 1.  Introduction
  9. 1.1.  Copyright and Disclaimer
  10. 1.2.  Credits
  11. 1.3.  Why Use a UPS (and genpowerd)?
  12. 1.4.  What You Need?
  13. 1.5.  How Does It Work?
  14. 1.5.1.  The Parts
  15. 1.5.1.1.  UPSs
  16. 1.5.1.2.  Cables
  17. 1.5.1.3.  genpowerd
  18. 1.5.1.4.  init
  19. 1.5.1.5.  genpowerfail
  20. 1.5.1.6.  rc.0
  21. 1.5.2.  All Together
  22. 1.5.2.1.  Power Failure
  23. 1.5.2.2.  Power Restored
  24. 1.5.2.3.  Low Battery
  25. 2.  Installation
  26. 2.1.  Hardware
  27. 2.1.1.  UPSs
  28. 2.1.2.  Serial Port
  29. 2.1.3.  Cables
  30. 2.1.3.1.  Custom Cables
  31. 2.1.3.1.1.  Miquel's powerd Cable
  32. 2.1.3.1.2.  Classic TrippLite Cable
  33. 2.1.3.1.3.  LAN Manager TrippLite Cable
  34. 2.1.3.1.4.  Jim's APC Back-UPS/Smart-UPS Windows NT Cable
  35. 2.1.3.1.5.  Lam's APC Back-UPS/Smart-UPS Windows NT Cable
  36. 2.1.3.1.6.  Marek's APC Back-UPS/Smart-UPS Linux Cable
  37. 2.1.3.1.7.  Erwin's Victron Lite Windows NT Cable
  38. 2.2.  Software
  39. 2.2.1.  System V Init
  40. 2.2.2.  The genpower Software
  41. 2.2.2.1.  Preconfigured genpowerd.h Configurations
  42. 2.2.2.2.  The gentest Program
  43. 2.2.2.3.  Editing genpowerd.h
  44. 2.2.2.3.1.  Name
  45. 2.2.2.3.2.  Cable Power
  46. 2.2.2.3.3.  Inverter Kill
  47. 2.2.2.3.4.  Kill Time
  48. 2.2.2.3.5.  Power Monitor
  49. 2.2.2.3.6.  Battery Monitor
  50. 2.2.2.3.7.  Cable Monitor
  51. 2.2.2.4.  genpowerfail
  52. 2.2.3.  The inittab
  53. 2.2.4.  The rc Files
  54. 2.2.4.1.  rc.local
  55. 2.2.4.2.  rc.0
  56. 3.  Testing
  57. 3.1.  Bench Testing
  58. 3.2.  Hot Testing
  59.  
  60.  
  61. 1.  Introduction
  62.  
  63. The genpower package is a hack of Miquel van Smoorenburg's powerd 
  64. daemon, which is distributed in the SysVInit package.  The 
  65. express aim of genpower is to add additional functionally and a 
  66. simpler means of configuring a powerd-like daemon.
  67.  
  68. The genpower daemon, genpowerd, will monitor the status of a 
  69. serial line connected to a UPS (Uninterruptible Power Supply).  
  70. If the status of the serial line changes, genpowerd will notify 
  71. the system to take the needed steps to react to the condition of 
  72. the UPS.  These actions include initiating and halting system 
  73. shutdowns based on the status of line power (power from your 
  74. power company) and of the UPS providing backup power to your 
  75. system.
  76.  
  77.  
  78. 1.1.  Copyright and Disclaimer
  79.  
  80. The program genpowerd, a utility to monitor UPS status and allow 
  81. the Linux operating system to act upon changes in said UPS 
  82. status, and supporting documents and files, are Copyright (C) 
  83. 1995 by Tom Webster <webster@kaiwan.com>, unless expressly stated 
  84. therein.
  85.  
  86. This program is free software; you can redistribute it and/or 
  87. modify it under the terms of the GNU General Public License as 
  88. published by the Free Software Foundation; either version 2 of 
  89. the License, or (at your option) any later version.
  90.  
  91. This program is distributed in the hope that it will be useful, 
  92. but WITHOUT ANY WARRANTY; without even the implied warranty of 
  93. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
  94. General Public License for more details.
  95.  
  96. You should have received a copy of the GNU General Public License 
  97. along with this program; if not, write to the Free Software 
  98. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  99.  
  100. LAN Manager and Windows NT are trademarks of Microsoft 
  101. Corporation.  LANtastic is a trademark of ArtSoft Corporation.  
  102. They are used in an editorial fashion only.  No such uses are 
  103. intended to convey endorsement or other affiliation with the 
  104. genpower package.
  105.  
  106.  
  107. 1.2.  Credits
  108.  
  109. Thanks to the many people who have helped make the genpower 
  110. package possible:
  111.  
  112.    Linus Torvalds <Linus.Torvalds@Helsinki.FI>, for creating 
  113.       Linux.
  114.  
  115.    Miquel van Smoorenburg <miguels@cistron.nl.mugnet.org>, for 
  116.       writing the SysVInit package and powerd.
  117.  
  118.    Harvey J Stein <hjstein@math.huji.ac.il>, for his thoughts on 
  119.       how UPS support should be done, and a copy of his Power 
  120.       Micro-Mini-HOWTO to look to when trying to explain how 
  121.       things should work.
  122.  
  123.    Erwin Authried <erwin@ws1.atv.tuwien.ac.at>, for gutting the 
  124.       unipowerd code to make it better and enabling command line 
  125.       configuration.  He is a better 'C' programmer than I.
  126.  
  127.    Marek Michalkiewicz <marekm@i17linuxa.ists.pwr.wroc.pl>, for 
  128.       many good changes, both to the documentation and the code.
  129.  
  130.    Larry TeSelle <leteselle@e-world.com>, for being my resident 
  131.       electrical engineer and looking interested when I rambled 
  132.       on about this project.
  133.  
  134.    Sherry Morgan <lilith99@aol.com>, for proofing this document 
  135.       and telling me that it was "better than I expected."
  136.  
  137.    Lam Dang <dangit@netcom.com>, for providing the Linux APC 
  138.       cable, which I also used as a basis to build the LAN 
  139.       Manager TrippLite cable.
  140.  
  141.    Danny ter Haar <danny@caution.cistron.nl.mugnet.org>, for 
  142.       posting a diagram of Miquel van Smoorenburg's cable.
  143.  
  144. The members of the Linux community who have shared their thoughts 
  145.    on UPS support with me.  I may not have adopted all of your 
  146.    ideas, or I may not have gotten to them all yet, but I have 
  147.    been listening.  Including but not limited to:
  148.  
  149.    Brian Kramer <bjkramer@pluto.njcc.com>
  150.    Tim Moloney <moloney@lds.loral.com>
  151.    Michael O'Reilly <Michael.OReilly@iinet.com.au>
  152.    Chris Origer <ctoriger@starbase.neosoft.com>
  153.    Mihkel Tammepuu <mihkel@teleport.ee>
  154.  
  155. And special thanks to the following folks for being brave enough 
  156.    to beta test this package and providing me with much needed 
  157.    feedback:
  158.  
  159.    Jeff Garnett <jgarnett@gate.net>
  160.    Jim Ockers <ockers@umr.edu>
  161.    Michael O'Reilly <Michael.OReilly@iinet.com.au>
  162.    Corey Sweeney <corey@interaccess.com>
  163.    Kenny Wickstrom <kenny@kennet.com>
  164.    Benjamin Wildasin <ben@ice-nine.student.harvard.edu>
  165.  
  166.  
  167. 1.3.  Why Use a UPS (and genpowerd)?
  168.  
  169. Nobody likes to lose data.  Power failures dump the data stored 
  170. in RAM, this is a pain on single-user / single-tasking systems, 
  171. but grows into more of a problem on multi-user / multi-tasking 
  172. systems like Linux.  Perhaps more importantly, UNIX style 
  173. (cached) file systems do not react well to losing power 
  174. unexpectedly.  Data tends to get lost and partitions thrashed 
  175. when major disk operations are interrupted unexpectedly.
  176.  
  177. A UPS buys the system time for the users to save their data and 
  178. to shutdown the system cleanly in the event of a power failure.  
  179. When the UPS is monitored by the system, users who would not 
  180. otherwise be aware of the failure (i.e. remote users) can be 
  181. warned that they need to save their data and log off.  The system 
  182. can also be shutdown cleanly without intervention by the system 
  183. administrator.
  184.  
  185. If you use Linux as a single-user system and never leave it 
  186. running while unsupervised, you can probably do without having 
  187. the system monitor the UPS.  But then again, why not let the 
  188. genpower package do some of the work for you?
  189.  
  190. Depending on the UPS, cable, and the manner in which the genpower 
  191. package is configured, the genpower package provides the 
  192. following features:
  193.  
  194.  * Line power sensing, to detect when the power has failed and 
  195.    initiate a delayed shutdown, or other appropriate actions.  
  196.    This facility also allows the system to cancel the shutdown if 
  197.    power is restored before the system is shutdown.
  198.  
  199.  * Low battery detection, to detect when the UPS's battery is 
  200.    running low and initiate an immediate shutdown.
  201.  
  202.  * Physical cable detection, to detect connection errors.
  203.  
  204.  * The ability to kill the UPS's inverter.  This shuts the 
  205.    inverter on the UPS off, to prevent the system from draining 
  206.    the UPS's battery after it has shutdown.  This allows the 
  207.    system to restart itself, as if the power had been turned on 
  208.    when line power is restored. 
  209.  
  210.    Additionally, this helps the UPS to retain enough power to 
  211.    deal with power yo-yos, where the power comes up and goes down 
  212.    several times before being fully restored.
  213.  
  214.  
  215. 1.4.  What Do You Need?
  216.  
  217. In order to use the genpower package, you will need:
  218.  
  219. A Linux system (the genpower package has been tested on kernels 
  220. from .99.9 to 1.2.8).
  221.  
  222. An installed copy of Miquel van Smoorenburg's System V Init 
  223. package.  The genpower package was written and tested with 
  224. version 2.4 of the package, and installation instructions are 
  225. based on a version 2.4 setup but genpower should be fully 
  226. compatible with version 2.5.  The System V Init package should be 
  227. available for anonymous ftp as SysVInit-2.5.tgz on 
  228. sunsite.unc.edu in the /Linux/System/daemons directory.
  229.  
  230. A UPS with a serial monitoring port, and its documentation.
  231.  
  232. A monitoring cable, either purchased from the UPS manufacturer, 
  233. or custom built (see section 2.1.2).  Generally, a straight 
  234. serial cable will not function properly as a monitoring cable.
  235.  
  236. The genpower package and this documentation.
  237.  
  238.  
  239. 1.5.  How Does It Work?
  240.  
  241. To understand how the genpower package works, first the functions 
  242. of the individual parts needs to be understood, then how all of 
  243. the parts work in concert under different situations.
  244.  
  245.  
  246. 1.5.1.  The Parts
  247.  
  248.  
  249. 1.5.1.1.  UPSs
  250.  
  251. A UPS is essentially a large battery and an inverter to convert 
  252. the direct current (DC) charge stored in the battery to 
  253. alternating current (AC).  When the line power connected to your 
  254. system fails, the UPS will provide power for your system to 
  255. continue operating for a limited time.  How long depends on the 
  256. capabilities of the UPS and the amount of power that your system 
  257. draws.
  258.  
  259. UPSs are generally divided into two classes based on the type of 
  260. service they provide.  On-line UPSs are the more traditional of 
  261. the two.  On-line UPSs provide the system with power from the 
  262. battery at all times, the battery is recharging as the system 
  263. draws power from it, so it is always near its full charge.  This 
  264. system has the advantage of providing well regulated supply of 
  265. power (with no dips or spikes) to the system and power is 
  266. continuously provided to the system in the event of a power 
  267. failure.
  268.  
  269. Line-interactive UPSs and backup/switching power supplies do not 
  270. provide the system with power from the battery at all times.  
  271. Instead, line power is filtered and passed on to the system.  If 
  272. line power goes out, the inverter is switched on and power is 
  273. provided from the battery.  Some line-interactive UPSs will use 
  274. battery power 'boost' line power to an acceptable range in the 
  275. event of a brown out.
  276.  
  277. Early backup power supplies had large latencies when switching 
  278. from line power to battery power which could cause problems with 
  279. sensitive systems.  The current generation of backup power 
  280. supplies can perform the switch-over much faster and should not 
  281. cause any problems.  The advantage of backup power supplies is 
  282. that they are less expensive than their on-line counterparts.  
  283. The only disadvantage of modern backup power supplies is that, 
  284. while they generally provide surge suppression and noise 
  285. filtering, the power provided to the system is not as 'clean' as 
  286. that provided by an on-line UPS.
  287.  
  288. Many UPSs today have a serial monitoring port.  This port allows 
  289. your system to monitor the status of line power and the UPS via a 
  290. customized serial cable and software.  UPSs with serial 
  291. monitoring ports come in two flavors, smart and dumb.
  292.  
  293. Smart UPSs are able to provide a multitude of information to the 
  294. host system, including the voltage levels coming into the UPS, 
  295. the estimated time that the UPS can sustain your system at the 
  296. current rate of power consumption, and even the temperature of 
  297. the UPS.  Unfortunately, most smart UPSs utilize proprietary 
  298. protocols to transmit this information, limiting the availability 
  299. of the information to the monitoring software sold by the UPS 
  300. manufacturer.
  301.  
  302. Dumb UPSs on the other hand, provide only a few pieces of 
  303. information by changing the state of lines in the serial 
  304. connection.  The information provided by dumb UPSs is usually 
  305. limited to the status of line power (on or off) and a warning 
  306. when the UPSs battery power is beginning to run low.  The 
  307. genpower package is designed to work with dumb UPSs or smart UPSs 
  308. emulating dumb ones (most will).
  309.  
  310.  
  311. 1.5.1.2.  Cables
  312.  
  313. The monitoring cable acts as a translator between the system and 
  314. the UPS.  The translation is needed because, while the port on 
  315. the UPSs are generally billed as a serial (RS-232) connection, 
  316. the only thing they tend to have in common with what most users 
  317. expect is common voltage levels and a similar number of pins.  As 
  318. a result, the monitoring cable needs to reroute the signal lines 
  319. in such a fashion as to make it look like a normal serial 
  320. connection to the system.
  321.  
  322. A custom cable is generally needed to perform this task. UPS 
  323. vendors are more than willing to sell you these custom cables for 
  324. a price.  If you sometimes use another operating system on your 
  325. Linux box, you may want to consider getting the UPS vendor's 
  326. solution for that operating system and configuring the genpower 
  327. package to work with the cable for your other operating system.
  328.  
  329. If you always run Linux, or don't care about automated UPS 
  330. support in other environments, or just prefer to build your own 
  331. cables then refer to Section 2.1.2.1 for information on building 
  332. custom cables.
  333.  
  334.  
  335. 1.5.1.3.  genpowerd
  336.  
  337. The genpowerd daemon has several jobs.  When executed with just a 
  338. serial device and a UPS/cable configuration as arguments, it will 
  339. monitor the status of the serial port.  The genpowerd daemon's 
  340. behavior is determined at run time by the UPS/cable configuration 
  341. specified on the command line.  This configuration defines which 
  342. lines are to be held high to provide power to the cable, which 
  343. lines are to be watched for status indicators, and what values 
  344. (high or low) are to be watched for.
  345.  
  346. If the line for monitoring line power status changes state to 
  347. failure mode (power outage), genpowerd writes the string "FAIL" 
  348. in /etc/powerstatus and /etc/upsstatus for use by init and the 
  349. genpowerfail script respectively.  Then genpowerd will send init 
  350. a SIGPWR signal to let the system know that the power status has 
  351. changed.
  352.  
  353. If the line for monitoring line power status changes state to 
  354. normal mode (the power is back on), genpowerd writes the string 
  355. "OK" in /etc/powerstatus and /etc/upsstatus for use by init and 
  356. the genpowerfail script respectively.  Then genpowerd will send 
  357. init a SIGPWR signal to let the system know that the power status 
  358. has changed.
  359.  
  360. If the UPS's batteries begin to run low, the UPS will change the 
  361. state of the line for monitoring battery status to failure mode.  
  362. genpowerd writes the string "FAIL" in /etc/powerstatus and the 
  363. string "SCRAM" /etc/upsstatus for use by init and the 
  364. genpowerfail script respectively.  Then genpowerd will send init 
  365. a SIGPWR signal to let the system know that the power status has 
  366. changed.  The reason for the difference in strings is init only 
  367. knows about power failures and restorations of power, low battery 
  368. situations are handled solely by the genpowerfail script.
  369.  
  370. When genpowerd is executed with the "-k" option, in addition to a 
  371. serial device and UPS/cable configuration, genpowerd will send 
  372. the signal defined by the UPS/cable configuration to kill the 
  373. UPS's inverter (effectively shutting the UPS off until line power 
  374. is restored).
  375.  
  376.  
  377. 1.5.1.4.  init
  378.  
  379. The init process has many jobs on UNIX systems, but its job with 
  380. respect to UPS monitoring is simple.  When init receives a SIGPWR 
  381. signal, it looks at the file /etc/powerstatus.  If 
  382. /etc/powerstatus contains the string "FAIL", init runs the 
  383. "pf::powerfail:..." line in the inittab.  This line should invoke 
  384. the genpowerfail script with the "start" command line argument.  
  385. If /etc/powerstatus contains the string "OK", init runs the 
  386. "pg::powerokwait:..." line in the inittab.  This line should 
  387. invoke the genpowerfail script with the "stop" command line 
  388. argument.
  389.  
  390.  
  391. 1.5.1.5.  genpowerfail
  392.  
  393. genpowerfail is a simple script designed to be run from the 
  394. inittab.  When invoked with the "start" command line argument, 
  395. genpowerfail looks at the file /etc/upsstatus.  If /etc/upsstatus 
  396. contains the string "SCRAM" (low battery), the genpowerfail 
  397. script will initiate an immediate system shutdown.  If 
  398. /etc/upsstatus contains any other value, a system shutdown is 
  399. initiated in two minutes.
  400.  
  401. If genpowerfail is invoked with the "stop" command line argument, 
  402. it will cancel any outstanding shutdown processes.
  403.  
  404. The shutdown actions above represent the default behavior of the 
  405. genpowerfail script.  These behaviors can be changed by editing 
  406. the genpowerfail script.
  407.  
  408.  
  409. 1.5.1.6.  rc.0
  410.  
  411. On most Linux systems a script will be run immediately prior to 
  412. halting or rebooting the system in the course of a shutdown.  
  413. This takes care of killing user processes and unmounting file 
  414. systems.
  415.  
  416. On systems using version 2.4 of the System V Init package, this 
  417. file will generally be named /etc/rc.d/rc.0.  On systems using 
  418. other versions of init, the names may be different (i.e. /etc/brc 
  419. was used by early versions of init).  The system administrator or 
  420. package developer who setup your systems software may have 
  421. configured it for another filename.
  422.  
  423. Invoking genpowerd with the "-k" command line option as the last 
  424. action in this script will kill the UPS's inverter when it is in 
  425. powerfail mode.
  426.  
  427.  
  428. 1.5.2.  All Together
  429.  
  430. Now that the role of the individual parts has been explained in 
  431. some detail, lets look at how they function together in three 
  432. different scenarios: Power Fail, Power Restored, and Low Battery.
  433.  
  434.  
  435. 1.5.2.1.  Power Failure
  436.  
  437.  (1) UPS: 
  438.      When Line power fails, the UPS provides power for the system 
  439.      and signals that the power has failed by changing the state 
  440.      of a line in the serial connection.
  441.  
  442.  (2) genpowerd: 
  443.      The change in the serial connection is detected. The string 
  444.      "FAIL" is written to /etc/powerstatus and /etc/upsstatus.  
  445.      The SIGPWR signal is sent to init.
  446.  
  447.  (3) init: 
  448.      The SIGPWR signal is received, and the contents of 
  449.      /etc/powerstatus are reviewed to determine the nature of the 
  450.      event.  The init process notes that the event is a power 
  451.      failure.  The "pf::powerfail:..." line in /etc/inittab is 
  452.      run by init.  This line invokes the genpowerfail script with 
  453.      the "start" command line argument.
  454.  
  455.  (4) genpowerfail: 
  456.      The script knows that there has been a power failure because 
  457.      it was invoked with the "start" argument, but looks at the 
  458.      contents of /etc/upsstatus to determine the type of power 
  459.      failure.  Since /etc/upsstatus contains the string "FAIL" 
  460.      rather than "SCRAM", a delayed shutdown is initiated.
  461.  
  462.  (5) rc.0:  
  463.      The rc.0 script is run by shutdown immediately prior to 
  464.      halting or rebooting the system.  The script kills all user 
  465.      processes, unmounts the disks, and calls genpowerd with the 
  466.      "-k" option.
  467.  
  468.  (6) genpowerd: 
  469.      Invoked with the "-k" option, genpowerd kills the inverter, 
  470.      shutting off power to the system.  When line power returns, 
  471.      the UPS should reset itself.
  472.  
  473.  
  474. 1.5.2.2.  Power Restored
  475.  
  476. [Steps 1-4 of the Power Failure Scenario (1.5.2.1) are assumed
  477. to have already occurred.]
  478.  
  479.  (5) UPS: 
  480.      When Line power is restored, the UPS signals that the power 
  481.      has been restored by changing the state of a line in the 
  482.      serial connection.
  483.  
  484.  (6) genpowerd: 
  485.      The change in the serial connection is detected.  The string 
  486.      "OK" is written to /etc/powerstatus and /etc/upsstatus.  The 
  487.      SIGPWR signal is sent to init.
  488.  
  489.  (7) init: 
  490.      The SIGPWR signal is received, and the contents of 
  491.      /etc/powerstatus are reviewed to determine that power has 
  492.      been restored.  The "pg::powerokwait:..." line in 
  493.      /etc/inittab is run by init.  This line invokes the 
  494.      genpowerfail script with the "stop" command line argument.
  495.  
  496.  (8) genpowerfail: 
  497.      The script knows that power has been a restored because it 
  498.      was invoked with the "stop" argument and issues a "shutdown 
  499.      -c" to halt any pending shutdowns.
  500.  
  501.  
  502. 1.5.2.3.  Low Battery
  503.  
  504. [Steps 1-4 of the Power Failure Scenario (1.5.2.1) are assumed
  505. to have already occurred.]
  506.  
  507.  (5) UPS: 
  508.      When the UPS determines that its battery is running low, it 
  509.      signals this by changing the state of a line in the serial 
  510.      connection.
  511.  
  512.  (6) genpowerd: 
  513.      The change in the serial connection is detected.  The string 
  514.      "FAIL" is written to /etc/powerstatus and the string "SCRAM" 
  515.      is written to /etc/upsstatus.  The SIGPWR signal is sent to 
  516.      init.
  517.  
  518.  (7) init: 
  519.      The SIGPWR signal is received, and the contents of 
  520.      /etc/powerstatus are reviewed to determine that the event is 
  521.      a power failure.  The "pf::powerfail:..." line in 
  522.      /etc/inittab is run by init.  This line invokes the 
  523.      genpowerfail script with the "start" command line argument.
  524.  
  525.  (8) genpowerfail: 
  526.      The script knows that there has been a power failure because 
  527.      it was invoked with the "start" argument, but looks at the 
  528.      contents of /etc/upsstatus to determine what type of power 
  529.      failure.  Since, /etc/upsstatus contains the string "SCRAM", 
  530.      an immediate shutdown is initiated.
  531.  
  532.  (9) rc.0:  
  533.      The rc.0 script is run by shutdown immediately prior to 
  534.      halting or rebooting the system.  The script kills all user 
  535.      processes, unmounts the disks, and calls genpowerd with the 
  536.      "-k" option.
  537.  
  538. (10) genpowerd: 
  539.      Invoked with the "-k" option, genpowerd kills the inverter, 
  540.      shutting power off to the system.  When line power returns, 
  541.      the UPS should reset itself.
  542.  
  543.  
  544. 2.  Installation
  545.  
  546. This section is devoted to the assembly, configuration, 
  547. compilation, and installation of the hardware and software needed 
  548. to make the genpowerd suite work with your system.
  549.  
  550. The final setup of your system takes place during the testing 
  551. phase of installation (Section 3).  Please do not skip ahead.
  552.  
  553. As always, have your system backed up and a boot disk on hand.  
  554. You shouldn't need either for this installation, but editing 
  555. system configuration files is an inherently dangerous task.
  556.  
  557.  
  558. 2.1.  Hardware
  559.  
  560. We will tackle hardware setup first.  Getting the UPS and the 
  561. monitoring cable ready to interface with the genpower software.
  562.  
  563.  
  564. 2.1.1.  UPSs
  565.  
  566. Uncrate and setup the UPS in an environment matching your UPS's 
  567. documentation.  Be cautious of where you locate your UPS if it 
  568. has a front panel or non-recessed "OFF" switch.  Many people have 
  569. lost hours of work because they put the UPS in a place where the 
  570. "OFF" switch could be accidentally tripped.
  571.  
  572. Prior to plugging in the UPS, you may want to use a plug tester 
  573. on the electrical outlet you are planning to use to make sure you 
  574. do not have problems with the line power (i.e. no ground or 
  575. chronically low voltage).  Some UPSs provide status LEDs that 
  576. will show such conditions, but many do not.
  577.  
  578. Plug the UPS in and allow it to charge for 24 hours, or the 
  579. manufacturer's recommended charging time, whichever is longer.
  580.  
  581. DO NOT PLUG ANYTHING INTO THE UPS'S ELECTRICAL OUTLETS UNTIL 
  582. DIRECTED.
  583.  
  584.  
  585. 2.1.2.  Serial Port
  586.  
  587. In order to use the genpower package, you must have an available 
  588. serial port.  This serial port should not be running getty or any 
  589. other communications software.  The permissions on the serial 
  590. port should also be changed to mode 600, to prevent malicious 
  591. users from killing the power.  (Slackware and other distributions 
  592. ship with the permissions set to 666.)
  593.  
  594. You may want to make a pseudo-device for your UPS, which will be 
  595. a symbolic link to the actual serial device.  To create the 
  596. symbolic link, issue the following command as the root user 
  597. (insert the correct serial device for your UPS):
  598.  
  599.      ln -s /dev/cua4 /dev/UPS
  600.  
  601. Now you can simply refer to /dev/UPS in your scripts.
  602.  
  603. The genpower package has been tested on a variety of serial 
  604. hardware, including smart and dumb multi-port serial boards.  The 
  605. genpower package is not very taxing on serial hardware, so any 
  606. type of UART should be able to support its needs.  The serial 
  607. device does not even need to have an IRQ assigned to it, the 
  608. polling mode of the serial driver works fine for genpower's 
  609. needs.  To setup a serial device without a controlling IRQ, issue 
  610. the following command from your rc.serial script (insert the 
  611. correct serial device for your UPS):
  612.  
  613.      setserial /dev/UPS irq 0
  614.  
  615. This may help if your system is configured DOS style, with 
  616. /dev/cua0 and /dev/cua2 sharing IRQ4 and /dev/cua1 and /dev/cua4 
  617. sharing IRQ3.  The other port can then use the IRQ for serial 
  618. communications without genpower getting in the way.  (Polling 
  619. mode may not work for all types of serial hardware.)
  620.  
  621.  
  622. 2.1.3.  Cables
  623.  
  624. Attach your UPS monitoring cable to your UPS and the serial port 
  625. you plan to monitor.
  626.  
  627. UPS monitoring cables fall into two classes, commercial and 
  628. custom.  If you run another operating system that you want 
  629. monitor your UPS, I'd recommend buying the cable for that 
  630. operating system from your UPS vendor.  This should give you a 
  631. cable which will provide UPS support in both operating systems 
  632. and is vendor approved.
  633.  
  634. If you only run Linux or don't need support for UPS monitoring 
  635. under other operating systems; feel comfortable working with 
  636. electronics, and aren't squeamish -- then building a custom cable 
  637. might be for you.  However, the author STRONGLY advises that the 
  638. reader consider using commercially procured cables, unless the 
  639. reader is very comfortable in constructing their own cables.
  640.  
  641. Details on building custom cables for a TrippLite BCxxx/LAN UPS 
  642. and an APC Back-UPS/Smart UPS are contained in the following 
  643. sections.  The TrippLite examples are provided because I own one 
  644. of their UPSs, and could test the cable designs. Jim Ockers 
  645. <ockers@umr.edu> and Lam Dang <dangit@netcom.com> provided the 
  646. information on the APC cables.  To find additional examples of 
  647. cable designs for other UPSs, please refer to Harvey J. Stein's 
  648. <hjstein@math.huji.ac.il> UPS HOWTO available on sunsite.unc.edu.
  649.  
  650.  
  651. 2.1.3.1.  Custom Cables
  652.  
  653. THERE IS NO WARRANTY FOR THE FOLLOWING CABLE DESIGNS TO THE 
  654. EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED 
  655. IN WRITING THE AUTHOR AND/OR OTHER PARTIES PROVIDE THE CABLE 
  656. DESIGNS "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR 
  657. IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  658. MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE 
  659. RISK AS TO THE QUALITY AND PERFORMANCE OF THE CABLE DESIGNS IS 
  660. WITH YOU.  SHOULD THE CABLE DESIGNS PROVE DEFECTIVE, YOU ASSUME 
  661. THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
  662.  
  663. IN NO EVENT, UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 
  664. WRITING, WILL THE AUTHOR BE LIABLE TO YOU FOR DAMAGES, INCLUDING 
  665. ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 
  666. OUT OF THE USE OR INABILITY TO USE THE CABLE DESIGNS (INCLUDING 
  667. BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE 
  668. OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE 
  669. CABLE DESIGNS TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH 
  670. HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
  671. DAMAGES.
  672.  
  673.  
  674. 2.1.3.1.1. Miquel's powerd Cable
  675.  
  676. Miquel van Smoorenburg's <miguels@cistron.nl.mugnet.org> cable 
  677. design is pretty simple and will function with genpower, 
  678. providing only basic power status sensing.  This drawing of the 
  679. cable diagram was culled from an USENET News posting by Danny ter 
  680. Haar <danny@caution.cistron.nl.mugnet.org>.
  681.  
  682. ----- Begin Diagram -----
  683.  
  684.                              +-------------o  DSR
  685.                              |
  686.                   +----------+-------------o  DTR
  687.                   |
  688.                 +---+
  689.                 |   | resistor
  690.                 |   | 10 kilo-Ohm
  691.                 |   |
  692.                 +---+                           To serial port.
  693.                   |
  694.     +-----o-------+------------------------o  DCD
  695.     |
  696.     o  UPS
  697.   \    relais
  698.    \
  699.     |
  700.     +-----o--------------------------------o  GND
  701.  
  702. ----- End Diagram -----
  703.  
  704. These are the genpowerd.h parameters for this cable.  Please 
  705. refer to Section 2.2.2.3 for a description of these settings:
  706.  
  707. Type:               "powerd"
  708. Cable Power:        {TIOCM_RTS,0}
  709. Inverter Kill:      {TIOCM_DTR,1}
  710. Inverter Kill Time: 0
  711. Power Check:        {TIOCM_CAR,0}
  712. Battery Check:      {0,0}
  713. Cable Check:        {TIOCM_DSR,0}
  714.  
  715.  
  716. 2.1.3.1.2. Classic TrippLite Cable
  717.  
  718. This is the cable I hand-built to work with powerd.  It provides 
  719. power status sensing and inverter shutdown.
  720.  
  721. NOTE: The inverter shutdown provided via the serial transmit line 
  722. (TIOCM_ST).  genpowerd holds this line high by sending a BREAK 
  723. signal for the defined duration.  Due to the inflexibility of 
  724. this method, this serial line should only be used for killing the 
  725. inverter.
  726.  
  727. ----- Begin Diagram -----
  728.  
  729.    9 pin to 25 pin  /-+--------+-\  25 pin to 9 pin cable
  730.    +-\_____________/  | Patch  |  \________/-+
  731.    |  _____________   | Panel  |   ________  |
  732.    +-/             \  |        |  /        \-+
  733.                     \-+--------+-/
  734.  
  735. Here is what the interface cable should look like:
  736.  
  737.    +---------------------------------------+-+--------------+
  738.    |  UPS Side                             | |  System Side |
  739.    +-----------------------------+----+----+-+----+----+----+
  740.    |                             | 9  | 25 | | 25 | 9  |    |
  741.    |Name                         |Pin |Pin | |Pin |Pin |Name|
  742.    +-----------------------------+----+----+-+----+----+----+
  743.    |                             | N/A| 01 | | 01 | N/A|FG  |
  744.    | Line fail open/inverter off | 03 | 02 | | 04 | 07 |RTS |
  745.    | Common Negative             | 01 | 08 | | 08 | 01 |DCD |
  746.    | Inverter shutdown/(+) Side  | 02 | 03 | | 02 | 03 |TD  |
  747.    | Inverter shutdown/(-) Side  | 04 | 20 | | 03 | 02 |RD  |
  748.    +-----------------------------+----+----+-+----+----+----+
  749.  
  750. NOTE: The frame ground (FG) is not used on 9 pin serial cables 
  751. and was permanently attached on the break-out box I've been 
  752. using, so I included it -- I don't think it is functional.
  753.  
  754. NOTE: There has been some discussion as to the need of resistors 
  755. in the inverter shutdown circuit.  In the several months I used 
  756. this cable, I never used resistors in the circuit.  If you are 
  757. concerned, you may want to place a resistor in the 10k-100k Ohm 
  758. range in the positive side of the inverter shutdown circuit.
  759.  
  760. ----- End Diagram -----
  761.  
  762. These are the genpowerd.h parameters for this cable, please refer 
  763. to Section 2.2.2.3 for a description of these settings:
  764.  
  765. Type:               "tripp-class"
  766. Cable Power:        {TIOCM_RTS,0}
  767. Inverter Kill:      {TIOCM_ST,1}
  768. Inverter Kill Time: 5
  769. Power Check:        {TIOCM_CAR,0}
  770. Battery Check:      {0,0}
  771. Cable Check:        {0,0}
  772.  
  773.  
  774. 2.1.3.1.3. LAN Manager TrippLite Cable
  775.  
  776. This cable should provide the same programming interface as LAN 
  777. Manager or Windows NT expects.  This design is adapted from a 
  778. USENET News posting by Lam Dang <dangit@netcom.com> for APC UPS 
  779. cables.  This cable should provide UPS power status, low battery 
  780. status, and inverter shutdown.
  781.  
  782. ----- Begin Diagram -----
  783.  
  784.    UPS SIDE (9 Pin)                              SERIAL PORT SIDE
  785.  
  786.    PIN 3    o-------------+------------------------o  DCD
  787.    [POWER FAIL]           |
  788.                         +---+
  789.                         |   | resistor
  790.                         |   | 10 kilo-Ohm
  791.                         |   |
  792.                         +---+
  793.                           |
  794.                           +------------------------o  RTS
  795.                           |
  796.                         +---+
  797.                         |   | resistor
  798.                         |   | 10 kilo-Ohm
  799.                         |   |
  800.                         +---+
  801.                           |
  802.    PIN 6    o-------------+------------------------o  CTS
  803.    [LOW BATTERY]
  804.  
  805.    Pin 1    o--------------------------------------o  GND
  806.    [COMMON NEGATIVE/GND]
  807.  
  808.                             +----------+ Resistor
  809.    PIN 2    o---------------+ 100k Ohm +-----------o  DTR
  810.    [INVERTER SHUTDOWN POS]  +----------+
  811.  
  812.    PIN 4    o--------------------------------------o  RI
  813.    [INVERTER SHUTDOWN NEG]
  814.  
  815. NOTE: There has been some discussion as to the need of resistors 
  816. in the inverter shutdown circuit. The inclusion of a resistor in 
  817. this design is in response to these concerns and was not present 
  818. in the original design.  The 100k Ohm resistor indicated above is 
  819. an estimate, you may want to place a resistor in the 10k-100k Ohm 
  820. range in the positive side of the inverter shutdown circuit.
  821.  
  822. ----- End Diagram -----
  823.  
  824. These are the genpowerd.h file parameters for this cable, please 
  825. refer to section 2.2.2.3 for a description of these settings:
  826.  
  827. Type:               "tripp-nt"
  828. Cable Power:        {TIOCM_RTS,0}
  829. Inverter Kill:      {TIOCM_DTR,1}
  830. Inverter Kill Time: 5
  831. Power Check:        {TIOCM_CTS,1}
  832. Battery Check:      {TIOCM_CAR,1}
  833. Cable Check:        {0,0}
  834.  
  835.  
  836. 2.1.3.1.4.  Jim's APC Back-UPS/Smart-UPS Windows NT Cable
  837.  
  838. Jim Ockers <ockers@umr.edu> provided this cable design.  An 
  839. alternative cable for APC UPSs is given by in section 2.1.3.1.5.
  840.  
  841. This cable is the same cable that is used for the Windows NT and 
  842. LAN Manager interface to the APC Back-UPS and Smart-UPS.  This 
  843. cable should provide UPS power status, low battery status, and 
  844. inverter shutdown.  This cable has been tested extensively on
  845. an APC Back-UPS 400.  (I haven't been able to get the inverter
  846. shutdown to work under NT 3.5, but everything else works fine.)
  847.  
  848. There is a 10K Ohm resistor connecting the RTS and the DCD lines
  849. on the PC side.  The Low Battery output from the UPS requires
  850. an external power supply; the RTS line from the PC's serial port
  851. provides that power.  Windows NT's UPS service keeps the RTS line
  852. high, and with the right configuration so does genpowerd. The 
  853. resistor is necessary to reduce the current flow.
  854.  
  855. If you have a 9-pin connector for the computer side, use 
  856. the pinout for DB9 below.  If you have a 25-pin connector, use 
  857. the pinout for DB25 below (in parentheses).
  858.  
  859. ----- Begin Diagram -----
  860.  
  861.           Serial Port side                      UPS side
  862.             pin, DB9 (DB25)                     pin, DB9
  863.    ShutDownUPS   4(20)<----------DTR--------------> 1
  864.    LineFail      8(5) <----------CTS--------------> 2
  865.    GND           5(7) <----------GND--------------> 4 (same as 9)
  866.    LowBattery    1(8) <----------DCD--------------> 5
  867.                  |
  868.                 +-+ 10k
  869.                 | | Ohm
  870.                 +-+ Resistor
  871.                  |
  872.                  7(4) RTS (CABLEPOWER)
  873.  
  874. ----- End Diagram -----
  875.  
  876. These are the genpowerd.h file parameters for this cable, please 
  877. refer to section 2.2.2.3 for a description of these settings:
  878.  
  879. Type:               "apc2-nt"
  880. Cable Power:        {TIOCM_RTS,0}
  881. Inverter Kill:      {TIOCM_DTR,1}
  882. Inverter Kill Time: 5
  883. Power Check:        {TIOCM_CTS,1}
  884. Battery Check:      {TIOCM_CAR,0}
  885. Cable Check:        {0,0}
  886.  
  887.  
  888. 2.1.3.1.5.  Lam's APC Back-UPS/Smart-UPS Windows NT Cable
  889.  
  890. Jeff Garnett <jgarnett@gate.net> provided this cable design, 
  891. derived from Lam Dang's <dangit@netcom.com>.  An alternative 
  892. cable for APC UPSs is given by Jim Ockers <ockers@umr.edu> in 
  893. section 2.1.3.1.4.
  894.  
  895. NOTE: This cable makes use of a +24V line provided by the APC 
  896.       UPS, this service has not been confirmed to exist on all 
  897.       models of APC UPSs.  Specifically, APC Back-UPS 400 series 
  898.       are known not to provide this service and should not use 
  899.       this cable.  Please use either the commercially available 
  900.       APC cables or Jim Ockers' LAN Manager cable (2.1.2.1.5) if 
  901.       this cable is incompatible with your UPS.
  902.  
  903. ----- Begin Diagram -----
  904.  
  905. The cable is to run between a 9-pin female connector on the UPS 
  906. and a 25-pin male connector on the PC.  Since I cut off one end 
  907. of a 9-pin cable and replaced it with a 25-pin connector, I had 
  908. to be VERY CAREFUL ABOUT PIN NUMBERS.  The 25-pin hood is big 
  909. enough to contain a voltage regulator and two resistors.  I got 
  910. all the materials (listed below) from Radio Shack for less than 
  911. 10 bucks.  As required by Windows NT Advanced Server 3.5 (Beta 
  912. 2), the "interface" between the UPS connector and the PC 
  913. connector is as follows:
  914.  
  915.         UPS (9-pin)           PC (25-pin)
  916.         1 (Shutdown)           20 (DTR)
  917.         3 (Line Fail)           5 (CTS)
  918.         4 (Common)              7 (GND)
  919.         5 (Low Battery)         8 (DCD)
  920.         9 (Chassis Ground)      1 (Chassis Ground)
  921.  
  922. This is pretty straightforward.  You can use UPS pin 6 instead of 
  923. 3 (they're the inverse of each other).  The complication is in 
  924. pulling up UPS open collector pins 3 (or 6) and 5.
  925.  
  926. This APC model provides an unregulated output of 24 Vdc at UPS 
  927. pin 8. The output voltage is available all the time (at least 
  928. until some time after Low Battery has been signaled).  The supply 
  929. is limited to 40 mA.  To pull up, UPS pin 8 is input to a +5 Vdc 
  930. voltage regulator.  The output of the regulator goes into two 
  931. 4.7K resistors.  The other end of one resistor connects both UPS 
  932. pin 3 (Line Fail) and PC pin 5 (CTS).  That of the other resistor 
  933. connects both UPS pin 5 (Low Battery) and PC pin 8 (DCD).  The 
  934. two resistors draw about 2 mA when closed.
  935.  
  936. For those who want to run it with Windows NT Advanced Server, the 
  937. UPS interface voltages are NEGATIVE for both power failure (using 
  938. UPS pin 3) and low battery conditions, and POSITIVE for remote 
  939. shutdown.  Serial line parameters such as baud rate don't matter.
  940.  
  941. List of materials:
  942.         1 shielded D-sub connector hood (Radio Shack 276-1510)
  943.         1 25-pin female D-sub crimp-type connector (276-1430)
  944.         1 7805 +5Vdc voltage regulator (276-1770)
  945.         2 4.7K resistors
  946.         1 component perfboard (276-148)
  947.         1 cable with at least one 9-pin male connector.
  948.  
  949. ----- End Diagram -----
  950.  
  951. These are the genpowerd.h file parameters for this cable, please 
  952. refer to section 2.2.2.3 for a description of these settings:
  953.  
  954. Type:               "apc1-nt"
  955. Cable Power:        {TIOCM_RTS,0}
  956. Inverter Kill:      {TIOCM_DTR,1}
  957. Inverter Kill Time: 5
  958. Power Check:        {TIOCM_CTS,0}
  959. Battery Check:      {TIOCM_CAR,0}
  960. Cable Check:        {0,0}
  961.  
  962.  
  963. 2.1.3.1.6.  Marek's APC Back-UPS/Smart-UPS Linux Cable
  964.  
  965. Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> has 
  966. provided a cable designed for use with Linux.  The inverter 
  967. shutdown is performed via the data transmit line (TIOCM_ST) and 
  968. the cable power is provided via DTR, rather than RTS.  These 
  969. control lines were selected to solve problems that some APC users 
  970. were having with NT style cables under Linux.  This cable has 
  971. been designed for and tested on an APC Back-UPS, it should also 
  972. work with APC Smart-UPSs using 'dumb' signaling.
  973.  
  974. UNIX systems will pull RTS and DTR high when the port is opened, 
  975. genpowerd clears these lines as soon as it can, but some APC 
  976. users have reported problems with the inverter shutting down when 
  977. they boot while in powerfail mode.  The choice of DTR to power 
  978. the cable is a result of some reports of serial hardware dropping 
  979. RTS over time.  This phenomena is not well documented, but using 
  980. DTR seems to solve the problem for those users who experience 
  981. spontaneous dropout on RTS.
  982.  
  983. ----- Begin Diagram -----
  984. UPS side                                serial port side
  985. 9 pin male                              9 (25) pin female
  986.  
  987. 1 o------------<-------------o 3 (2)   TX   (HIGH = kill power)
  988.  
  989. 2 o------------>-------------o 1 (8)   DCD  (HIGH = power fail)
  990.  
  991. 9 o--------------------------o 5 (7)   GND
  992.  
  993. 5 o------------>--------+----o 6 (6)   DSR  (LOW = low battery)
  994.                         |
  995.                       +---+
  996.                       |   | 6.8 kilo ohm
  997.                       |   | resistor
  998.                       |   | (4.7k-10k should work fine)
  999.                       +---+
  1000.                         |
  1001.                         +---o 4 (20)   DTR  (cable power)
  1002.  
  1003. ----- End Diagram -----
  1004.  
  1005. These are the genpowerd.h file parameters for this cable, please 
  1006. refer to section 2.2.2.3 for a description of these settings:
  1007.  
  1008. Type:               "apc-linux"
  1009. Cable Power:        {TIOCM_DTR,0}
  1010. Inverter Kill:      {TIOCM_ST,1}
  1011. Inverter Kill Time: 5
  1012. Power Check:        {TIOCM_CAR,1}
  1013. Battery Check:      {TIOCM_DSR,0}
  1014. Cable Check:        {0,0}
  1015.  
  1016.  
  1017. 2.1.3.1.7.  Erwin's Victron Lite Windows NT Cable
  1018.  
  1019. Erwin Authried <erwin@ws1.atv.tuwien.ac.at> has provided this 
  1020. cable for Victron Lite UPSs, for use with Linux and Windows NT.  
  1021. The genpower configuration for this cable is identical to Lam 
  1022. Dang's APC cable for Windows NT ("apc1-nt").
  1023.  
  1024. ----- Begin Diagram -----
  1025.    UPS SIDE (9 Pin)                              SERIAL PORT SIDE
  1026.  
  1027.    PIN 9    o-------------+------------------------o  CTS
  1028.    [Mains failure]        |
  1029.                         +---+
  1030.                         |   | resistor
  1031.                         |   | 10 kilo-Ohm
  1032.                         |   |
  1033.                         +---+
  1034.                           |
  1035.                           +------------------------o  RTS
  1036.                           |
  1037.                         +---+
  1038.                         |   | resistor
  1039.                         |   | 10 kilo-Ohm
  1040.                         |   |
  1041.                         +---+
  1042.                           |
  1043.    PIN 7    o-------------+------------------------o  DCD
  1044.    [Battery low]
  1045.  
  1046.    Pin 5    o--------------------------------------o  GND
  1047.    [Common]
  1048.  
  1049.    PIN 1    o--------------------------------------o  DTR
  1050.    [UPS shutdown]
  1051. ----- End Diagram -----
  1052.  
  1053. These are the genpowerd.h file parameters for this cable, please 
  1054. refer to section 2.2.2.3 for a description of these settings:
  1055.  
  1056. Type:               "apc1-nt"
  1057. Cable Power:        {TIOCM_RTS,0}
  1058. Inverter Kill:      {TIOCM_DTR,1}
  1059. Inverter Kill Time: 5
  1060. Power Check:        {TIOCM_CTS,0}
  1061. Battery Check:      {TIOCM_CAR,0}
  1062. Cable Check:        {0,0}
  1063.  
  1064.  
  1065. 2.2.  Software
  1066.  
  1067. The next step is to install and configure the needed software.  
  1068. Once you begin to update the system software, do not reboot the 
  1069. system until you are finished with all of the steps in this 
  1070. section.  Incompletely installed and configured software can 
  1071. leave your system in an unstable state.
  1072.  
  1073.  
  1074. 2.2.1.  System V Init
  1075.  
  1076. This documentation assumes that Miquel van Smoorenburg's System V 
  1077. Init package has been installed on your system.  This is an 
  1078. option with most modern distributions of Linux.  The genpower 
  1079. package was written and tested with version 2.4 of the package, 
  1080. and installation instructions are based on a version 2.4 setup, 
  1081. but genpower should be fully compatible with version 2.5.
  1082.  
  1083. If you are not using the System V Init package, you will have to 
  1084. install it in order for the genpower software to function 
  1085. correctly.  The System V Init package should be available for 
  1086. anonymous ftp as SysVInit-2.5.tgz on sunsite.unc.edu in the 
  1087. /Linux/System/daemons directory.  Install per the directions 
  1088. provided with that software.
  1089.  
  1090.  
  1091. 2.2.2.  The genpower Software
  1092.  
  1093. Installing the genpower software consists of several simple but 
  1094. necessary steps.  The genpowerd.h configuration file MUST support 
  1095. your UPS/cable combination for genpowerd to function properly.
  1096.  
  1097. Several preconfigured UPS/cable combinations have been provided 
  1098. in the genpowerd.h file, details on these configurations are 
  1099. contained in the next section.  If you need to add a new 
  1100. configuration to genpowerd.h for your setup, you will have to 
  1101. edit the genpowerd.h file.  Details on editing genpowerd.h are in 
  1102. section 2.2.2.3.  You may want to use the gentest software 
  1103. (section 2.2.2.2) to help you determine the settings for 
  1104. genpowerd.h.  Remember to edit the genpowerfail script to fit 
  1105. your needs.  
  1106.  
  1107. After you have ensured that genpowerd.h supports your UPS/cable 
  1108. combination, check the paths in the included Makefile and issue a 
  1109. "make all" to compile the genpower software.  If there were no 
  1110. errors reported, issue a "make install" as the root user, and the 
  1111. genpower software will be copied to its appropriate locations.
  1112.  
  1113.  
  1114. 2.2.2.1.  Preconfigured genpowerd.h Configurations
  1115.  
  1116. A number of preconfigured UPS/cable combinations have been 
  1117. included in genpowerd.h.  If your UPS and cable match those 
  1118. listed, you can simply specify the configuration name on the 
  1119. command line.
  1120.  
  1121. powerd
  1122.    This configuration is for UPSs with cables designed to be 
  1123.    compatible with Miquel van Smoorenburg's powerd daemon.
  1124.  
  1125.    +-----------+------------+---------------+-------------------+
  1126.    | Vendor    | UPS        | Cable         | Cable Part Number |
  1127.    +-----------+------------+---------------+-------------------+
  1128.    | Misc      | Misc       | Linux (powerd)| (See 2.1.3.1.1.)  |
  1129.    +-----------+------------+---------------+-------------------+
  1130.  
  1131. tripp-nt
  1132.    This configuration is for TrippLite UPSs and cables compatible 
  1133.    with Microsoft LAN Manager, Microsoft Windows NT, and 
  1134.    Artsoft's LANtastic.
  1135.  
  1136.    +-----------+------------+---------------+-------------------+
  1137.    | Vendor    | UPS        | Cable         | Cable Part Number |
  1138.    +-----------+------------+---------------+-------------------+
  1139.    | TrippLite | BCxxx/LAN, | LAN Manager,  | 73-0665 (DB9)     |
  1140.    |           | Omni,      | MS Win NT,    | 73-0664 (8pin DIN)|
  1141.    |           | Unison     | LANtastic     |                   |
  1142.    +-----------+------------+---------------+-------------------+
  1143.    | TrippLite | BCxxx/LAN, | Linux         | (See 2.1.3.1.3.   |
  1144.    |           | Omni,      |               |  for cable)       |
  1145.    |           | Unison     |               |                   |
  1146.    +-----------+------------+---------------+-------------------+
  1147.  
  1148. tripp-class
  1149.    This configuration is for TrippLite UPSs using my Classic 
  1150.    TrippLite cable.
  1151.  
  1152.    +-----------+------------+---------------+-------------------+
  1153.    | Vendor    | UPS        | Cable         | Cable Part Number |
  1154.    +-----------+------------+---------------+-------------------+
  1155.    | TrippLite | BCxxx/LAN, | Linux         | (See 2.1.3.1.2.   |
  1156.    |           | Omni,      |               |  for cable)       |
  1157.    |           | Unison     |               |                   |
  1158.    +-----------+------------+---------------+-------------------+
  1159.  
  1160. apc1-nt
  1161.    This configuration is for Lam Dang's APC cable 
  1162.    that should be compatible with  Microsoft LAN Manager, 
  1163.    Microsoft Windows NT, and Artsoft's LANtastic.
  1164.  
  1165.    Erwin Authried's Victron Lite UPS cable that should be 
  1166.    compatible with  Microsoft LAN Manager, Microsoft Windows NT, 
  1167.    and Artsoft's LANtastic should also function with this 
  1168.    configuration.
  1169.  
  1170.    NOTE: Lam's cable makes use of a +24V line provided by the APC 
  1171.          UPS, this service has not been confirmed to exist on all 
  1172.          models of APC UPSs.  Specifically, APC Back-UPS 400 
  1173.          series are known not to provide this service and should 
  1174.          not use this cable.  Please use either the commercially 
  1175.          available APC cables or Jim Ockers' LAN Manager cable 
  1176.          (2.1.2.1.5) if this cable is incompatible with your UPS.
  1177.  
  1178.    +-----------+------------+---------------+-------------------+
  1179.    | Vendor    | UPS        | Cable         | Cable Part Number |
  1180.    +-----------+------------+---------------+-------------------+
  1181.    | APC       | Back-UPS,  |  Linux        | (See 2.1.3.1.5.   |
  1182.    |           | Smart-UPS  |               |   for cable)      |
  1183.    +-----------+------------+---------------+-------------------+
  1184.    | Victron   | Lite       |  Linux        | (See 2.1.3.1.7.   |
  1185.    |           |            |               |   for cable)      |
  1186.    +-----------+------------+---------------+-------------------+
  1187.  
  1188. apc2-nt
  1189.    This configuration is for Jim Ockers' APC cable that should be 
  1190.    compatible with Microsoft LAN Manager, Microsoft Windows NT, 
  1191.    and Artsoft's LANtastic.
  1192.  
  1193.    +-----------+------------+---------------+-------------------+
  1194.    | Vendor    | UPS        | Cable         | Cable Part Number |
  1195.    +-----------+------------+---------------+-------------------+
  1196.    | APC       | Back-UPS,  | Linux         | (See 2.1.3.1.4.   |
  1197.    |           | Smart-UPS  |               |   for cable)      |
  1198.    +-----------+------------+---------------+-------------------+
  1199.  
  1200. apc-linux
  1201.    This configuration is for Marek Michalkiewicz's APC cable for 
  1202.    Linux.  This cable is specifically designed to be used with 
  1203.    genpower and should not be assumed to be compatible with any 
  1204.    other UPS monitoring software.
  1205.  
  1206.    +-----------+------------+---------------+-------------------+
  1207.    | Vendor    | UPS        | Cable         | Cable Part Number |
  1208.    +-----------+------------+---------------+-------------------+
  1209.    | APC       | Back-UPS,  | Linux         | (See 2.1.3.1.6.   |
  1210.    |           | Smart-UPS  |               |   for cable)      |
  1211.    +-----------+------------+---------------+-------------------+
  1212.  
  1213.  
  1214. 2.2.2.2.  The gentest Program
  1215.  
  1216. Configuring genpowerd by trial and error with an unfamiliar cable 
  1217. and UPS can be frustrating.  The gentest program is provided to 
  1218. ease the struggle of testing UPS and cable combinations.
  1219.  
  1220. The gentest program takes parameters to determine if it should 
  1221. set DTR or RTS (either, neither, or both can be set) and the 
  1222. serial port you want to monitor.  The "-d" parameter sets the DTR 
  1223. bit, while "-r" sets RTS.  The syntax looks like this:
  1224.  
  1225.      gentest [-d -r] <serial port>
  1226.           i.e.
  1227.      genpower -r /dev/cua4
  1228.  
  1229. The genpowerd will display the settings of the control lines for 
  1230. the selected serial port.  An asterisk is displayed next to any 
  1231. values that have changed.  For example, if you were to start 
  1232. gentest with the command line:
  1233.  
  1234.         genpower -r /dev/cua4
  1235.  
  1236. while cua4 was connected to a LAN Manager cable and a TrippLite 
  1237. BC750/LAN, gentest would display:
  1238.  
  1239.      ---------------
  1240.      DTR = Cleared
  1241.      RTS = Set
  1242.      
  1243.      CAR = Low   ( )
  1244.      CTS = Low   ( )
  1245.      DSR = Low   ( )
  1246.      RNG = Low   ( )
  1247.  
  1248. If the line power to the UPS were shut off, gentest would update 
  1249. the screen with:
  1250.  
  1251.      ---------------
  1252.      DTR = Cleared
  1253.      RTS = Set
  1254.      
  1255.      CAR = Low   ( )
  1256.      CTS = High  (*)
  1257.      DSR = Low   ( )
  1258.      RNG = Low   ( )
  1259.  
  1260. indicating that the CTS line had changed status and that the new 
  1261. status of the CTS line is HIGH.
  1262.  
  1263. The gentest program is valuable in determining the parameters to 
  1264. use in genpowerd.h with unfamiliar cables and UPSs.  In the 
  1265. example above, it could be determined that RTS probably provides 
  1266. power to the cable and that CTS is the line that shows changes in 
  1267. the line power's status (with LOW being the normal status of the 
  1268. line).
  1269.  
  1270. To build gentest, simply issue a "make gentest" in the directory 
  1271. containing the genpower package.
  1272.  
  1273. NOTE: If you want to monitor how genpowerd is interacting with 
  1274. the serial line, gentest is not the appropriate program.  The 
  1275. gentest program was designed to alter line conditions to emulate 
  1276. different genpowerd configurations.  If you want to 'snoop' on 
  1277. what genpowerd is doing, I would recommend Jeff Tranter's 
  1278. <Jeff_Tranter@Mitel.COM> statserial program.  Jeff's statserial 
  1279. program was designed to display the status of serial control 
  1280. lines without altering the condition of the serial lines.  The 
  1281. URL for statserial is as follows: 
  1282.  
  1283.     ftp://sunsite.unc.edu/pub/Linux/system/Serial/
  1284.         statserial-1.0.tar.gz
  1285.  
  1286.  
  1287. 2.2.2.3.  Editing genpowerd.h
  1288.  
  1289. The genpowerd.h header file controls the way in which the 
  1290. genpowerd daemon communicates with the UPS.  This file MUST be 
  1291. edited to match your systems requirements prior to compiling 
  1292. genpowerd.
  1293.  
  1294. The sections which define the configurations for different UPS 
  1295. and cable combinations are part of a structure definition.  The 
  1296. formatting of these entries is very specific and must be 
  1297. maintained.  Additional configurations may be added prior to the 
  1298. "{NULL}" entry in the structure.
  1299.  
  1300. The configuration entry for Miquel's powerd cable will be used as 
  1301. an example.  The two lines defining the configuration for 
  1302. Miquel's powerd cable are (the second line is wrapped in this 
  1303. document, but should be a single line in the configuration file:
  1304.  
  1305. /* Miquel's powerd cable */
  1306. {"powerd",{TIOCM_RTS,0},{TIOCM_DTR,1},0,{TIOCM_CAR,0},{0,0},
  1307.     {TIOCM_DSR,0}},
  1308.  
  1309. This entry can be divided up into seven sections, each of which 
  1310. defines an aspect of the configuration:
  1311.  
  1312.    1.  Name             "powerd"
  1313.    2.  Cable Power      {TIOCM_RTS,0}
  1314.    3.  Inverter Kill    {TIOCM_DTR,1}
  1315.    4.  Kill Time        0
  1316.    5.  Power Monitor    {TIOCM_CAR,0}
  1317.    6.  Battery Monitor  {0,0}
  1318.    7.  Cable Monitor    {TIOCM_DSR,0}
  1319.  
  1320. If you are fortunate enough to have a UPS and cable that match 
  1321. the provided configurations in the genpowerd.h, then you do not 
  1322. have to edit the genpowerd.h file and can go on to compiling 
  1323. genpowerd.  A list of the provided genpowerd configurations is in 
  1324. section 2.2.2.1.
  1325.  
  1326. 2.2.2.3.1.  Name
  1327.  
  1328. The name section of the configuration is a text string that 
  1329. uniquely identifies the configuration.  This string is used to 
  1330. select the configuration at run time.  The string should be 
  1331. enclosed in single quotes contain no spaces or shell meta-
  1332. characters and be composed of eleven (11) of fewer characters.
  1333.  
  1334.  
  1335. 2.2.2.3.2.  Cable Power
  1336.  
  1337. This section defines which serial control line is set to power 
  1338. the cable's monitoring functions.  If no lines need to be set 
  1339. high to provide positive voltage for the cable, select an unused 
  1340. control line.
  1341.  
  1342. This section is composed of two pieces of information, separated 
  1343. by a comma and enclosed in curly brackets.  The first piece of 
  1344. information is a textual tag defining which control line will be 
  1345. used to provide power.  Acceptable values for this tag are:
  1346.  
  1347.      TIOCM_DTR       DTR - Data Terminal Ready
  1348.      TIOCM_RTS       RTS - Ready to Send
  1349.  
  1350. The second piece of information is an integer value, defining the 
  1351. normal operating status of the control line.
  1352.  
  1353.      0 = the output is set (pos. voltage).
  1354.      1 = the output is cleared (neg. voltage).
  1355.  
  1356. In our example, Miquel's cable is configured with the following 
  1357. values in this section:
  1358.  
  1359.      {TIOCM_RTS,0}
  1360.  
  1361. This means that at startup, genpowerd will set the RTS control 
  1362. line high to provide power for the cable monitoring functions.
  1363.  
  1364.  
  1365. 2.2.2.3.3.  Inverter Kill
  1366.  
  1367. This section defines which serial control line is to be used to 
  1368. kill the UPS's inverter after an orderly shutdown is performed.  
  1369. If this function is not supported by your UPS/cable 
  1370. configuration, an unused control line should still be defined for 
  1371. this section.
  1372.  
  1373. This section is composed of two pieces of information, separated 
  1374. by a comma and enclosed in curly brackets.  The first piece of 
  1375. information is a textual tag defining which control line will be 
  1376. used to send the kill signal.  Acceptable values for this tag 
  1377. are:
  1378.  
  1379.      TIOCM_DTR       DTR - Data Terminal Ready
  1380.      TIOCM_RTS       RTS - Ready to Send
  1381.      TIOCM_ST        ST  - Data Transmit
  1382.  
  1383. The second piece of information is an integer value, defining the 
  1384. normal operating status of the control line.
  1385.  
  1386.      0 = the output is set (pos. voltage).
  1387.      1 = the output is cleared (neg. voltage).
  1388.  
  1389. In our example, Miquel's cable is configured with the following 
  1390. values in this section:
  1391.  
  1392.      {TIOCM_DTR,1}
  1393.  
  1394. This means that when genpowerd is started with the "-k" option, 
  1395. genpowerd will set the DTR control line high to signal the UPS to 
  1396. shutdown the inverter.  The line is held high for the duration 
  1397. defined in the next section.
  1398.  
  1399.  
  1400. 2.2.2.3.4.  Kill Time
  1401.  
  1402. This section defines how long the inverter kill signal, as 
  1403. defined in the previous section, is to be sent.  Some UPSs 
  1404. require that the signal is maintained for a minimum period of 
  1405. time before they will act upon it.
  1406.  
  1407. This section is composed of a single integer value that defines 
  1408. how long, in seconds, the inverter kill signal is to be sent.  As 
  1409. a default, five (5) seconds seems to work well for most UPSs.  If 
  1410. the your UPS/cable combination does not support shutting down the 
  1411. UPS's inverter, this value should be set to zero.
  1412.  
  1413. In our example, Miquel's cable is configured with the following 
  1414. value in this section:
  1415.  
  1416.      0
  1417.  
  1418. This means that Miquel's cable does not support the inverter kill 
  1419. function (the signal will be held for 0 seconds).
  1420.  
  1421.  
  1422. 2.2.2.3.5.  Power Monitor
  1423.  
  1424. This section defines which serial control line is to be used to 
  1425. monitor the status of line power coming into the UPS.
  1426.  
  1427. This section is composed of two pieces of information, separated 
  1428. by a comma and enclosed in curly brackets.  The first piece of 
  1429. information is a textual tag defining which control line will be 
  1430. used to monitor the power.  Acceptable values for this tag are:
  1431.  
  1432.      TIOCM_CTS       CTS - Clear To Send
  1433.      TIOCM_CAR       DCD - Data Carrier Detect
  1434.      TIOCM_RNG       RI  - Ring Indicator
  1435.      TIOCM_DSR       DSR - Data Signal Ready
  1436.  
  1437. The second piece of information is an integer value, defining the 
  1438. normal operating status of the control line.
  1439.  
  1440.      0 = the line is normally high (pos. voltage).
  1441.      1 = the line is normally low (neg. voltage).
  1442.  
  1443. In our example, Miquel's cable is configured with the following 
  1444. values in this section:
  1445.  
  1446.      {TIOCM_CAR,0}
  1447.  
  1448. This means that while the UPS is running off of line power, the 
  1449. carrier detect line (CD or CAR) is held high by the UPS.  Should 
  1450. a power failure occur, this line will then drop low to signal the 
  1451. change.
  1452.  
  1453.  
  1454. 2.2.2.3.6.  Battery Monitor
  1455.  
  1456. This section defines which serial control line is to be used to 
  1457. monitor the status of the UPS battery.  Some UPSs will send a 
  1458. signal when the UPS battery has nearly been depleted.  The 
  1459. genpowerd daemon can use this signal to initiate an emergency 
  1460. shutdown.
  1461.  
  1462. This section is composed of two pieces of information, separated 
  1463. by a comma and enclosed in curly brackets.  The first piece of 
  1464. information is a textual tag defining which control line will be 
  1465. used to monitor the battery.  Acceptable values for this tag are:
  1466.  
  1467.      TIOCM_CTS       CTS - Clear To Send
  1468.      TIOCM_CAR       DCD - Data Carrier Detect
  1469.      TIOCM_RNG       RI  - Ring Indicator
  1470.      TIOCM_DSR       DSR - Data Signal Ready
  1471.      0               N/A - Disabled
  1472.  
  1473. The second piece of information is an integer value, defining the 
  1474. normal operating status of the control line.
  1475.  
  1476.      0 = the line is normally high (pos. voltage).
  1477.      1 = the line is normally low (neg. voltage).
  1478.  
  1479. In our example, Miquel's cable is configured with the following 
  1480. values in this section:
  1481.  
  1482.      {0,0}
  1483.  
  1484. This means that Miquel's cable does not support low battery 
  1485. signals.
  1486.  
  1487.  
  1488. 2.2.2.3.7.  Cable Monitor
  1489.  
  1490. This section defines which serial control line is to be used to 
  1491. monitor the status of the cable connection between the system and 
  1492. the UPS.  On the surface this sounds good, but the hardware 
  1493. implementation tends to be flawed.  Unless the UPS provides an 
  1494. otherwise unused loopback along two pins in its interface, the 
  1495. best you can do is check that one end of the cable is attached to 
  1496. the system.  Most commercial cables do not seem to support this 
  1497. feature, and it is provided only for compatibility with powerd.
  1498.  
  1499. This section is composed of two pieces of information, separated 
  1500. by a comma and enclosed in curly brackets.  The first piece of 
  1501. information is a textual tag defining which control line will be 
  1502. used to monitor the cable.  Acceptable values for this tag are:
  1503.  
  1504.      TIOCM_CTS       CTS - Clear To Send
  1505.      TIOCM_CAR       DCD - Data Carrier Detect
  1506.      TIOCM_RNG       RI  - Ring Indicator
  1507.      TIOCM_DSR       DSR - Data Signal Ready
  1508.      0               N/A - Disabled
  1509.  
  1510. The second piece of information is an integer value, defining the 
  1511. normal operating status of the control line.
  1512.  
  1513.      0 = the line is normally high (pos. voltage).
  1514.      1 = the line is normally low (neg. voltage).
  1515.  
  1516. In our example, Miquel's cable is configured with the following 
  1517. values in this section:
  1518.  
  1519.      {TIOCM_DSR,0}
  1520.  
  1521. This means that the DSR control line is used to monitor the cable 
  1522. connection.  In the case of Miquel's cable, the DSR line is tied 
  1523. to the RTS line (which provides power to the cable's monitoring 
  1524. functions).  In this case, the cable connection test only 
  1525. verifies that the system end of the cable is connected to the 
  1526. serial port.  This system will not detect a whether the cable is 
  1527. connected to the UPS.
  1528.  
  1529. NOTE: If cable monitoring is not enabled and genpowerd detects a 
  1530. power failure on startup, a shutdown with a short delay (1 minute 
  1531. by default) will be initiated.  This behavior was added because 
  1532. incorrectly configured, or missing cables, can fool the system 
  1533. into believing that it needs to shutdown immediately.  This can 
  1534. lead to a system locked into a loop of constant reboots.  The 
  1535. delayed shutdown should provide the system administrator with 
  1536. sufficient time to abort the shutdown if a bad cable is the 
  1537. culprit.
  1538.  
  1539.  
  1540. 2.2.2.4.  genpowerfail
  1541.  
  1542. The genpowerfail script controls what actions are performed by 
  1543. the system when power fails, power returns, and when the UPS's 
  1544. battery begins to run low during a power failure.
  1545.  
  1546. The sample genpowerfail script is configured to initiate a system 
  1547. reboot after a two minute delay.  The choice of reboot over halt 
  1548. was to prevent a theoretical problem where power could return 
  1549. after all of the processes were killed (like genpowerd) and 
  1550. before the signal to kill the inverter has been sent.  If 
  1551. genpowerfail had initiated a halt, this could result in an 
  1552. indefinitely halted system.
  1553.  
  1554. In the event of power returning after a delayed shutdown has 
  1555. begun, the default script is configured to issue a "shutdown -c" 
  1556. to kill all pending shutdowns.
  1557.  
  1558. If UPS battery power should begin to run low, genpowerfail is 
  1559. configured to issue an immediate reboot, via the "shutdown -r 
  1560. now" command.
  1561.  
  1562. NOTE: If your UPS or monitoring cable does not support killing 
  1563. the inverter, you will probably want to change the reboot 
  1564. commands to halts.  This can be done by changing portions of the 
  1565. script from "shutdown -r +2" to "shutdown -h +2" and "shutdown -r 
  1566. now" to "shutdown -h now".  See the manual page for shutdown for 
  1567. additional information.
  1568.  
  1569. If these defaults are not what you want, or the paths to binary 
  1570. files are not correct, edit this file to match your needs.
  1571.  
  1572. NOTE: If you edit the genpowerfail script, make sure to test it 
  1573. from the command line before integrating it into your system.  
  1574. Syntax errors are not reported by init when it attempts to 
  1575. execute a script.
  1576.  
  1577.  
  1578. 2.2.3.  The inittab
  1579.  
  1580. Modify your inittab to call the powerfail script in the event of 
  1581. a change in power status.  To do this add the following lines to 
  1582. your /etc/inittab:
  1583.  
  1584.      # What to do when power fails.
  1585.      pf::powerfail:/etc/genpowerfail start
  1586.  
  1587.      # If power is back, cancel the running shutdown.
  1588.      pg::powerokwait:/etc/genpowerfail stop
  1589.  
  1590. Similar lines may already exist in your inittab; if they do you 
  1591. may simply edit them.  An additional line may exist to handle the 
  1592. return of power while in single user mode.  The default genpower 
  1593. setup handles all modes, so this line should be deleted or 
  1594. commented out.
  1595.  
  1596. When you have completed the changes to /etc/inittab, force init 
  1597. to reread the altered inittab by issuing the following command as 
  1598. the root user:
  1599.  
  1600.     telinit q
  1601.  
  1602.  
  1603. 2.2.4.  The rc Files
  1604.  
  1605. In order to have genpowerd started each time you boot Linux, and 
  1606. to have genpowerd kill the inverter, you will need to edit your 
  1607. startup and shutdown scripts.
  1608.  
  1609.  
  1610. 2.2.4.1.  rc.local
  1611.  
  1612. Add a line, or two, to your rc.local file to start genpowerd when 
  1613. you boot Linux.  The rc.local file will be located in either the 
  1614. /etc or /etc/rc.d directory.  The syntax for genpowerd is:
  1615.  
  1616.      genpowerd <line> <ups-type>
  1617.  
  1618. where "<line>" is the serial device to be monitored and "<ups-
  1619. type>" is the UPS/cable configuration.  Use the /dev/cua?? type 
  1620. devices rather than the /dev/tty?? or /dev/ttyS?? serial devices.  
  1621. The additions to your rc.local should look something like this:
  1622.  
  1623.      # Add support for the UPS
  1624.      echo "Starting genpowerd daemon..."
  1625.      if [ -x /sbin/genpowerd ]; then
  1626.         /sbin/genpowerd /dev/cua4 tripp-nt
  1627.      fi
  1628.  
  1629. NOTE: You may want to make a pseudo-device for your UPS, which 
  1630. will be a symbolic link to the actual serial device.  To create 
  1631. the symbolic link, issue the following command as the root user 
  1632. (insert the correct serial device for your UPS):
  1633.  
  1634.      ln -s /dev/cua4 /dev/UPS
  1635.  
  1636. Now you can simply refer to /dev/UPS in your scripts.
  1637.  
  1638.  
  1639. 2.2.4.2.  rc.0
  1640.  
  1641. The rc.0 script is the last thing executed by the system prior to 
  1642. calling halt or reboot.  The script's functions include 
  1643. unmounting disks and killing user processes.  This script my go 
  1644. by other names depending on how your system was configured.  Mine 
  1645. is /etc/rc.d/rc.0, and other alternatives include /etc/brc and 
  1646. /etc/rc.d/rc.shutdown.
  1647.  
  1648. Invoking genpowerd with the "-k" command line option as the last 
  1649. action in this script will kill the UPS's inverter when it is in 
  1650. powerfail mode.  This command should follow the "umount -a" 
  1651. command which unmounts the disks.  The root disk is not actually 
  1652. unmounted (it is made read-only) so the genpowerd command will 
  1653. still be available to the system.  You may want to include a 
  1654. sleep command (5-10 seconds) to ensure the disks have had time to 
  1655. sync and unmount cleanly.
  1656.  
  1657. The syntax to kill the inverter is as follows, where "<line>" is 
  1658. the serial device to be monitored and "<ups-type>" is the 
  1659. UPS/cable configuration:
  1660.  
  1661.      genpowerd -k <line> <ups-type>
  1662.  
  1663. My rc.0 file is included below.  A little bit of explanation is 
  1664. probably in order to make its functioning apparent.
  1665.  
  1666. My rc.0 script makes use of the fact that genpowerd will return a 
  1667. non-zero exit code if it fails to kill the inverter for whatever 
  1668. reason.  In this event, I've configured my system to halt itself 
  1669. rather than continue with a reboot.  The problem is that calling 
  1670. the halt command from within rc.0 results in rc.0 being called by 
  1671. halt and potentially recursing infinitely.
  1672.  
  1673. I take care of this problem with the $RECURSE shell variable.  
  1674. The statement "RECURSE=${RECURSE-0}" will initialize $RECURSE to 
  1675. a value of "0", if it hasn't been defined yet.  If $RECURSE has 
  1676. been defined, its current value is retained.  This way I can find 
  1677. out if this instance of rc.0 is being called recursively and 
  1678. shield certain parts of the script from being run again.
  1679.  
  1680. My rc.0 script also checks the contents of /etc/upsstatus to see 
  1681. if genpowerd should be run with the "-k" option.  I like to add a 
  1682. little 'sleep' time if I'm killing the inverter, just to be sure 
  1683. everything has had time to sync.  This waiting period isn't 
  1684. needed if the system isn't in powerfail, so I do the check before 
  1685. running that block of commands.
  1686.  
  1687. ----- Begin Included File: /etc/rc.d/rc.0 -----
  1688. #! /bin/sh
  1689. #
  1690. # rc.0    This file is executed by init(8) when the system
  1691. #         is being shutdown (i.e. set to run at level 0).
  1692. #         It usually takes care of un-mounting all unneeded
  1693. #         file systems.
  1694. #
  1695. # Version:  /etc/rc.d/rc.0     2.20     7/7/95
  1696. #
  1697. # Authors:
  1698. #     Tom Webster, <webster@kaiwan.com>
  1699. #     Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
  1700. #     Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
  1701. #
  1702.  
  1703. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  1704.  
  1705. # Some of these will display errors if genpowerd causes 
  1706. #    a recurse, but better safe than sorry.
  1707. echo Unmounting file systems.....
  1708. sync
  1709. if [ "`mount | grep ' on / ' | grep umsdos`" = "" ]
  1710. then
  1711.     umount -a
  1712. else
  1713.     # Let's not put ugly errors on the screen with UMSDOS.
  1714.     umount -a 2> /dev/null 
  1715. fi
  1716.  
  1717. # Check to see if power needs to be killed.
  1718. RECURSE=${RECURSE-0}
  1719. if [ $RECURSE -eq 0 ]
  1720. then
  1721.     RECURSE=1
  1722.     export RECURSE
  1723.     if [ -r /etc/upsstatus ]
  1724.     then
  1725.         stats=`head -1 /etc/upsstatus`
  1726.         # Kill power if needed
  1727.         if [ $stats != "OK" ]
  1728.         then
  1729.             echo "Killing Power...."
  1730.             sleep 5
  1731.             if genpowerd -k /dev/cua4 tripp-nt
  1732.             then
  1733.                 # The inverter should be off by now.  
  1734.                 # If we are still here, the power is back.
  1735.                 echo The power is back, rebooting....
  1736.                 echo
  1737.             else
  1738.                 # Problem killing the power, halt
  1739.                 echo Error killing the inverter, halting....
  1740.                 /sbin/halt -q
  1741.             fi
  1742.         fi
  1743.     fi
  1744. fi
  1745. echo Done.
  1746. ----- End Included File: /etc/rc.d/rc.0 -----
  1747.  
  1748. NOTE: Make sure that all commands that you need to process a 
  1749. recursed rc.0 are present on the mounted filesystems.  If you 
  1750. have /usr on a separate filesystem, it may involve moving files 
  1751. over to /bin or /sbin.
  1752.  
  1753.  
  1754. 3.  Testing
  1755.  
  1756. Your software should now be setup and ready to be tested.  The 
  1757. following sections will guide you through a test process designed 
  1758. to test your UPS hardware and monitoring software.  As you 
  1759. complete the testing cycle, you will also complete the hardware 
  1760. installation.
  1761.  
  1762.  
  1763. 3.1.  Bench Testing
  1764.  
  1765. The first step in the testing procedure is to make sure the UPS 
  1766. hardware and software is functioning properly, before relying on 
  1767. the UPS to provide power for your system.
  1768.  
  1769. To do this:
  1770.  
  1771.  (1) Plug the UPS into a power strip with an on/off switch for 
  1772.      testing.  DO NOT simply pull the plug to simulate a power 
  1773.      failure.  UPSs require grounding which a power strip (even 
  1774.      in the off mode) should provide.  The power strip should be 
  1775.      in the "ON" mode at this time and providing current to the 
  1776.      UPS.
  1777.  
  1778.  (2) Make sure that the UPS monitoring cable is attached 
  1779.      properly.  (Section 2.1.2)
  1780.  
  1781.  (3) Run genpowerd on the appropriate serial device.  If you have 
  1782.      rebooted your system since editing your rc.local, genpowerd 
  1783.      may already be running.  If not, type the following from the 
  1784.      command line as the root user, where "<line>" is the serial 
  1785.      device you have attached the monitoring cable to and 
  1786.      "<ups-type>" is the UPS/cable configuration:
  1787.  
  1788.           genpowerd <line> <ups-type>
  1789.  
  1790.      For example the command would look like this on my system:
  1791.  
  1792.           genpowerd /dev/cua4 tripp-nt
  1793.  
  1794.  (4) Plug a lamp, or two if needed, into the UPS's power outlet.  
  1795.      A lamp is a good choice for testing UPSs because they draw 
  1796.      a known amount of power in watts.  If you want to, you can 
  1797.      compute an estimate of the power drawn by your system in 
  1798.      watts (watts = voltage * amperage), otherwise 200 watts is a 
  1799.      good round number for most fair sized desktop systems.
  1800.  
  1801.  (5) Turn the lamp(s) and the UPS on.  The lamp(s) should be on 
  1802.      now, if they aren't check your power strip and UPS.
  1803.  
  1804.      * Make sure the UPS is turned on.  Are there any status 
  1805.        lights lit?  If not, check the UPS's power source.  Most 
  1806.        will only supply power after a failure and will not do so 
  1807.        if plugged into a dead circuit.
  1808.  
  1809.      * Try plugging a lamp into the power strip.  If the light 
  1810.        comes on, and your UPS has been charging for the 
  1811.        manufacturer's recommended period, and is not supplying 
  1812.        power you may have a defective UPS.
  1813.  
  1814.      * If the power strip isn't providing power, try another 
  1815.        outlet.  If that doesn't fix the problem, try another 
  1816.        power strip.
  1817.  
  1818.  (6) Turn the power strip off.  The UPS alarm should sound, and 
  1819.      after a couple of seconds, the shutdown announcement should 
  1820.      appear on the console.  If the announcement doesn't appear, 
  1821.      try the following trouble-shooting tips, cycling power from 
  1822.      the power strip each time:
  1823.  
  1824.      * Make sure genpowerd is running on the correct serial 
  1825.        device.
  1826.  
  1827.      * Make sure that your /etc/inittab contains the lines added 
  1828.        under Section 2.2.4.  As root run the following command to 
  1829.        force init to reread /etc/inittab:
  1830.  
  1831.             telinit q
  1832.  
  1833.      * Check to see that the /etc/genpowerfail script is 
  1834.        correctly configured.
  1835.  
  1836.      * Check the genpowerd.h file it may not be configured 
  1837.        properly.  Remember that all high or low values refer to 
  1838.        the normal operating state and not the failure mode (which 
  1839.        is what is listed in most documentation).  Also remember 
  1840.        that you will have to recompile genpowerd after you change 
  1841.        genpowerd.h for the changes to take effect.
  1842.  
  1843.      * If the lamp goes out and the UPS turns off immediately 
  1844.        after switching the power off on the power strip, you have 
  1845.        cable power set to the line that should be controlling the 
  1846.        inverter kill in your genpowerd.h.  The genpowerd daemon 
  1847.        is holding the line high that tells the UPS to kill the 
  1848.        inverter during a power failure!
  1849.  
  1850.  (7) Turn the power strip back on.  The lamp(s) should remain on, 
  1851.      and a message stating that the shutdown has been halted 
  1852.      should appear on the screen.  If not, see the 
  1853.      troubleshooting steps in (6).
  1854.  
  1855.  (8) Shut the power strip off again.  The UPS's alarm should 
  1856.      sound again, and your system should initiate another 
  1857.      shutdown.  Wait until the system shuts down.
  1858.  
  1859.      If you have the inverter kill option configured, the UPS 
  1860.      should have gone off right before the system started to 
  1861.      reboot.  Turn the power strip back on before your system 
  1862.      finishes rebooting, the lamp(s) should come back on.  If 
  1863.      this didn't happen, check the genpowerd.h settings for 
  1864.      inverter shutdown and make sure that your shutdown script is 
  1865.      running genpowerd with the "-k" option and the correct 
  1866.      serial device.
  1867.  
  1868.      If you are not using the inverter kill option, your system 
  1869.      should have halted after shutdown.  Turn the UPS back on and 
  1870.      reset your Linux system.
  1871.  
  1872.  (9) Check that genpowerd is running on the correct serial device 
  1873.      after the system has rebooted.  If it isn't check your 
  1874.      rc.local file for errors.
  1875.  
  1876. (10) PROCEED WITH STEP 10 ONLY IF YOU HAVE THE LOWBATTERY 
  1877.      DETECTION OPTION CONFIGURED.  Turn the power strip off.  
  1878.      When the delayed shutdown message appears, enter the 
  1879.      following command as the root user:
  1880.  
  1881.           shutdown -c
  1882.  
  1883.      This will cancel the delayed shutdown.  With the power strip 
  1884.      still in the off position wait for the system to initiate an 
  1885.      immediate shutdown due to a low battery.  If this does not 
  1886.      happen, i.e. the UPS shuts off and the system never 
  1887.      initiates another shutdown:
  1888.  
  1889.      * Check the low battery configuration in the genpowerd.h 
  1890.        file.  Remember if you make any changes, you will have to 
  1891.        recompile genpowerd.
  1892.  
  1893.      * Let the UPS recharge for a couple of hours to get it out 
  1894.        of the low battery range before you repeat step 10 again.
  1895.  
  1896. (11) Congratulations, if you gotten this far, and everything 
  1897.      worked as planned, you are ready for a hot test.
  1898.  
  1899.  
  1900. 3.2.  Hot Testing
  1901.  
  1902. In this section we will be testing the UPS while it is providing 
  1903. power to your system.  It is essential that your system passed 
  1904. the bench tests in section 3.1 before you begin hot testing.  
  1905. Most of the trouble shooting steps were listed in Section 3.1, if 
  1906. you have problems please refer back to this section.
  1907.  
  1908. To hot test your system:
  1909.  
  1910.  (1) With the UPS still plugged into a power strip, make sure the 
  1911.      power strip is on and the UPS has recharged.  Shut your 
  1912.      Linux system down and plug it into the electrical outlets on 
  1913.      the UPS.  DO NOT PLUG LASER PRINTERS INTO THE UPS!  Start 
  1914.      your system up.
  1915.  
  1916.      I use a drafting lamp with a low wattage bulb (40 watts) to 
  1917.      simulate a high load on the systems disks.  You may want to 
  1918.      do something similar.  Log on as the root user and sync the 
  1919.      disks often during these tests.
  1920.  
  1921.  (2) Turn off the power strip.  You should see a message come up 
  1922.      on the console that a delayed shutdown has been initiated 
  1923.      (two minutes in the default setup).
  1924.  
  1925.  (3) Turn the power strip back on. You should see a message come 
  1926.      up on the console that the pending shutdown canceled.
  1927.  
  1928.  (4) Turn off the power strip.  You should see a message come up 
  1929.      on the console that a delayed shutdown has been initiated 
  1930.      (two minutes in the default setup).  Wait until the system 
  1931.      shuts down.
  1932.  
  1933.      If the system has the inverter kill option configured, and 
  1934.      the system boots with the disks in an unclean state, you may 
  1935.      have to adjust the length of the pause before inverter 
  1936.      shutdown in the rc.0 file.
  1937.  
  1938.  (5) Restart your system.
  1939.  
  1940.      If you are using the inverter kill option, simply turn the 
  1941.      power strip back on.  The UPS should come back on and your 
  1942.      system should reboot.
  1943.  
  1944.      If you are not using the inverter kill option, turn the 
  1945.      power strip back on and reset your system.
  1946.  
  1947.  (6) PROCEED WITH STEP 6 ONLY IF YOU HAVE THE LOWBATTERY 
  1948.      DETECTION OPTION CONFIGURED.  Turn the power strip off.  
  1949.      When the delayed shutdown message appears, enter the 
  1950.      following command as the root user:
  1951.  
  1952.           shutdown -c
  1953.  
  1954.      This will cancel the delayed shutdown.  With the power strip 
  1955.      still in the off position wait for the system to initiate an 
  1956.      immediate shutdown due to a low battery.
  1957.  
  1958.  (7) Congratulations!  If you passed the hot testing, you are 
  1959.      done.  You now have a Linux box with UPS monitoring 
  1960.      installed, configured, and tested.  The thoughts of power 
  1961.      outages will no longer strike fear into your heart.  Relax, 
  1962.      have a virtual (or real) beer and pat yourself on the back.
  1963. -14-
  1964.  
  1965.  
  1966.